/**
 * sequelize.model.js
 * @description 用sequelize-auto生成model文件
 * 然后在package.json中scripts中添加脚本"model": "node sequelize.model.js"
 * todo: 1. 生成所有表的model在默认models目录下
 *          命令：npm run model
 *       2. 生成所有表的model在指定目录下
 *          命令：npm run model path
 */
// sequelize.model.js
let path = process.argv[2];
if (path) {
  path = './' + path;
}
const database = {
  // [required] * 数据库地址
  host: 'localhost',
  // [required] * 数据库名称
  database: 'mdy_rm_mis',
  // 数据库用户名
  user: 'rmmis_root',
  // 数据库密码
  pass: '241022!mdY',
  // 数据库端口号
  port: 3306,
  // Sequelize的构造函数“options”标记对象的JSON文件路径
  config: '',
  // 输出文件路径
  output: path || '',
  // 数据库类型：postgres, mysql, sqlite
  dialect: 'mysql',
  // 包含在model的配置参数中define的模型定义的JSON文件路径
  additional: '',
  // 表名,多个表名逗号分隔
  tables: '',
  // 要跳过的表名，多个表名逗号分隔
  'skip-tables': '',
  // 使用驼峰命名模型和字段
  camel: false,
  // 是否写入文件
  'no-write': false,
  // 从中检索表的数据库架构
  schema: false,
  // 将模型输出为typescript文件
  typescript: false
};
/*
// 第一种方式：通过运行shell命令方式
const child_process = require('child_process');
const { exec } = child_process;
let connectShell = './node_modules/sequelize-auto/bin/sequelize-auto';
for (const i in database) {
  const value = database[i];
  if (value) {
    if (value === true) {
      connectShell += ` --${i}`;
    } else {
      connectShell += ` --${i} ${value}`;
    }
  }
}
exec(connectShell, (err, stdout, stderr) => {
  console.log(`stderr: ${stderr}`);
  console.log(`stdout: ${stdout}`);
  if (err) {
    console.error(`exec error: ${err}`);
  }
});
 */
// 第二种方式：通过调用组件的方式生成
const SequelizeAuto = require('sequelize-auto');
const auto = new SequelizeAuto(database.database, database.user, database.pass, {
  host: database.host,
  port: database.port,
  dialect: 'mysql',
  directory: process.argv[2] || 'models', // 在哪里写入文件
  // caseModel: 'c', // 将蛇式snake_case列名转换为驼峰式camelCase字段名：user_id->userId
  // caseFile: 'c', // 为每个模型创建的文件名使用camelCase.js，而不是snake_case.js
  // singularize: true, // 将复数表名转换为单数模型名
  additional: {
    freezeTableName: true,
    timestamps: false
    // ...options added to each model
  }
  // tables: ['table1', 'table2', 'myschema.table3'] // 如果省略，使用所有表
});

auto.run().then(data => {
  console.log(data.tables); // table and field list
  console.log(data.foreignKeys); // table foreign key list
  console.log(data.indexes); // table indexes
  console.log(data.hasTriggerTables); // tables that have triggers
  console.log(data.relations); // relationships between models
  console.log(data.text) // text of generated models
});
